package main

import (
	"fmt" // 输出和输出
	// "bufio" //缓存IO

	"io"
	// "io/ioutil" //io 工具包
	"os" // os包提供了操作系统函数的不依赖平台的接口。
)

// 判断文件是否存在
func checkFileIsExist(fileName string) bool {

	fi, err := os.Stat(fileName) // fi FileInfo, err error
	fmt.Println(err)
	fmt.Println(fi)
	return os.IsNotExist(err) // boolean，指示是否已知错误，ErrNotExist
}

// 创建文件，如果存在，会覆盖后写入
func createFile(fileName string, writeContent ...string) {

	file, err := os.Create(fileName)

	// arr := [5]string{3: "hello world", 4: "tom"}

	if err != nil {
		fmt.Println(err)
	} else {
		// defer 延迟执行，在return语句之后
		defer file.Close()

		for _, v := range writeContent {
			// 两种写入方法
			file.WriteString("v: " + v + "\n")
			file.Write([]byte("write byte v: " + v + ",\n"))
		}
	}
}

// 读取文件
func readFile(fileName string) []byte {
	file, err := os.Open(fileName)

	if err != nil {
		fmt.Println("open file err:", err)
	}
	defer file.Close()

	var buf [128]byte
	var content []byte

	for {
		n, err := file.Read(buf[:])
		if err == io.EOF {
			// 读取结束
			fmt.Println("读取完毕")
			break
		}
		if err != nil {
			fmt.Println("read file err ", err)
			return nil
		}
		content = append(content, buf[:n]...)
	}
	// fmt.Println(string(content))
	return content
}

func main() {
	// fileName1 := "./io操作.md"
	fileName2 := "./a.txt"
	// fmt.Println(checkFileIsExist(fileName1))
	// createFile("./a.txt", []string{"1", "2", "3", "4"}...)
	readFile(fileName2)
}
